001 /**
002 * Created by IntelliJ IDEA.
003 * User: Wei Wang
004 * Date: Jan 9, 2003
005 * Time: 10:16:34 PM
006 */
007
008 package EVolve.util.equators;
009
010 import java.util.*;
011
012 public class UnorderedSet extends Set{
013 private HashMap data;
014
015 public UnorderedSet(int interval) {
016 data = new HashMap();
017 size = interval;
018 emptySlot = 0;
019 }
020
021 public boolean exist(long element) {
022
023 return data.containsKey(new Long(element));
024
025 }
026
027 public Set newSet() {
028 return new UnorderedSet(size);
029 }
030
031 public long getElement(int index) {
032 Iterator it = data.keySet().iterator();
033 int i = 0;
034 while (it.hasNext()) {
035 Long key = (Long)it.next();
036 if (i<index) continue;
037 return key.longValue();
038 }
039 return -1;
040 }
041
042 public void addElement(long element) {
043 if (emptySlot>=size) {
044 System.out.println("Set is full, unable to add new elements!!!");
045 return;
046 }
047 Long key = new Long(element);
048 if (data.containsKey(key)) {
049 Long value = (Long)data.get(key);
050 data.put(key, new Long(value.longValue()+1));
051 } else {
052 data.put(key, new Long(1));
053 }
054 emptySlot++;
055 }
056
057 public Set union(Set set) {
058 Set result = new UnorderedSet(size*2);
059 HashMap setData[] = new HashMap[2];
060
061 setData[0] = data;
062 setData[1] = ((UnorderedSet)set).data;
063
064 for (int i=0; i<setData.length; i++) {
065 Iterator it = setData[i].keySet().iterator();
066 while (it.hasNext()) {
067 result.addElement(((Long)it.next()).longValue());
068 }
069 }
070
071 return result;
072 }
073
074 public Set intersection(Set set) {
075 HashMap setData[] = new HashMap[2];
076 Set result = new UnorderedSet(size);
077
078 setData[0] = data;
079 setData[1] = ((UnorderedSet)set).data;
080
081 Iterator it = setData[0].keySet().iterator();
082 while (it.hasNext()) {
083 Long key = (Long)it.next();
084 if (setData[1].containsKey(key))
085 result.addElement(key.longValue());
086 }
087
088 return result;
089 }
090
091 public boolean equals(Set set, float percent) {
092 float counter = 0;
093 HashMap setData[] = new HashMap[2];
094
095 setData[0] = data;
096 setData[1] = ((UnorderedSet)set).data;
097
098 Iterator it = setData[0].keySet().iterator();
099 while (it.hasNext()) {
100 Long key = (Long)it.next();
101 if (setData[1].containsKey(key))
102 counter = counter + ((Long)setData[0].get(key)).longValue()+((Long)setData[1].get(key)).longValue();
103 }
104
105 return ((100*counter/(2*size)) >= percent);
106 }
107
108 public long getHashValue() {
109 long result = 0;
110
111
112 Iterator it = data.keySet().iterator();
113 while (it.hasNext()) {
114 Long key = (Long)it.next();
115 result = result ^ key.intValue();
116 }
117
118 return result;
119 }
120
121 public long getEntityId(int i) {
122 if (data.size() == 0)
123 return -1;
124
125 Iterator it = data.keySet().iterator();
126
127 return ((Long)it.next()).longValue();
128 }
129
130 public Object clone() {
131 return super.clone();
132 }
133 }